package com.daji.io_nio.channel;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.channels.FileChannel;


public class FileChannelTransferDemo2 {
    public static void main(String[] args) throws Exception {
        //Demo: One channel transfer data to another channel
        fileChannelTransfer();
    }

    public static void fileChannelTransfer() throws Exception {
        //1、Create two channel: fromChannel, toChannel
        RandomAccessFile aFile = new
                RandomAccessFile("/home/daji/tempfiles/FromChannel.txt", "rw");
        FileChannel fromChannel = aFile.getChannel();
        RandomAccessFile bFile = new
                RandomAccessFile("/home/daji/tempfiles/ToChannel.txt", "rw");
        FileChannel toChannel = bFile.getChannel();
        //2、fromChannel的数据 传输到 toChannel
        long position = 0;
        long count = fromChannel.size();
        /*
            方法的输入参数 position 表示从 position 处开始向目标文件写入数据，count 表示
            最多传输的字节数。如果源通道的剩余空间小于 count 个字节，则所传输的字节数要
            小于请求的字节数。此外要注意，在 SoketChannel 的实现中，SocketChannel 只会
            传输此刻准备好的数据（可能不足 count 字节）。因此，SocketChannel 可能不会将
            请求的所有数据(count 个字节)全部传输到 FileChannel 中。
        */
        toChannel.transferFrom(fromChannel, position, count);
        aFile.close();
        bFile.close();
        System.out.println("over!");
    }

}